package LeetCode.LC151;

/**
 * @author corn
 * @create 2020-07-16-10:57
 */

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 给定一个字符串，逐个翻转字符串中的每个单词。
 * 示例 1：
 * 输入: "the sky is blue"
 * 输出: "blue is sky the"
 *
 * 示例 2：
 * 输入: "  hello world!  "
 * 输出: "world! hello"
 * 解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
 *
 *示例 3：
 * 输入: "a good   example"
 * 输出: "example good a"
 * 解释: 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
 *
 * 说明：
 *     无空格字符构成一个单词。
 *     输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
 *     如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
 *
 */
public class ReverseWords151 {
    public static void main(String[] args) {
        String s = "  hello  world!  ";
        String s1 = Solution6.reverseWords(s);
        System.out.println(s1);

    }

}
class Solution6 {
    public static String reverseWords(String s) {

        //使用 split 将字符串按空格分割成字符串数组；
        //使用 reverse 将字符串数组进行反转；
        //使用 join 方法将字符串数组拼成一个字符串。
        //除去开头和末尾的空白字符
        s = s.trim();
        // 正则匹配连续的空白字符作为分隔符分割
        List<String> wordList = Arrays.asList(s.split("\\s+"));

        Collections.reverse(wordList);
        return String.join(" ", wordList);


        //个人初始想法：成功
//        s = s.trim();
//        StringBuilder sb = new StringBuilder();
//        Stack<Character> stackall = new Stack<>();
//        Stack<Character> word = new Stack<>();
//        for(char c:s.toCharArray()){
//            stackall.push(c);
//        }
//        while(!stackall.empty()){
//            if(stackall.peek().equals(' ')){
//                while (!word.empty()){
//                    sb.append(word.pop());
//                }
//                if(!(sb.charAt((sb.length()-1)) == ' ')){
//                    sb.append(' ');
//                }
//                stackall.pop();
//            }else{
//                word.push(stackall.pop());
//            }
//        }
//        while (!word.empty()) {
//            sb.append(word.pop());
//        }
//        return sb.toString();
    }
}
